home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / exampleCode / SciTex / examples / cocode / co.c next >
Encoding:
C/C++ Source or Header  |  1994-08-02  |  16.7 KB  |  754 lines

  1. /******************************************************************************
  2.  *  co.c
  3.  ******************************************************************************
  4.  *
  5.  *  Purpose:
  6.  *      example for color coding as texture mapping
  7.  *
  8.  *  Authors:
  9.  *      Michael Teschner and Christian Henn
  10.  *
  11.  *  Note:
  12.  *      None.
  13.  *  
  14.  *  Revisions:
  15.  *      10.11.93    micha    Created file.
  16.  *
  17.  ******************************************************************************
  18.  *
  19.  *  COPYRIGHT (C)                  1992, 1993, 1994
  20.  *
  21.  *  BY  CHRISTIAN HENN             M.E. MUELLER-INSTITUTE FOR MICROSCOPY (MIM)
  22.  *      HENN@COMP.BIOZ.UNIBAS.CH   CH-4056 BASEL, SWITZERLAND   
  23.  *
  24.  *  AND MICHAEL WALDHERR-TESCHNER  SILICON GRAPHICS INDUSTRIES (SGI)
  25.  *      MICHA@BASEL.SGI.COM        CH-4125 RIEHEN, SWITZERLAND
  26.  *
  27.  ******************************************************************************
  28.  *
  29.  *  PERMISSION TO USE, COPY, MODIFY AND DISTRIBUTE THIS SOFTWARE AND ITS DOCU-
  30.  *  MENTATION FOR THE PURPOSE OF RESEARCH, DEVELOPMENT AND EDUCATION IS HEREBY
  31.  *  GRANTED FREE OF CHARGE, SUBJECT TO THE FOLLOWING RESTRICTIONS:
  32.  *
  33.  *  THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
  34.  *  IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF DESIGN,
  35.  *  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A
  36.  *  COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  37.  *
  38.  *  IN NO EVENT SHALL SILICON GRAPHICS OR THE M.E. MUELLER-INSTITUTE BE LIABLE
  39.  *  FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  40.  *  OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  41.  *  WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
  42.  *  LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
  43.  *  THIS SOFTWARE.
  44.  *
  45.  ******************************************************************************
  46.  */
  47. #include <stdio.h>
  48. #include <gl/gl.h>
  49. #include <gl/device.h>
  50. #include <gl/get.h>
  51. #include <math.h> 
  52. #include "trackball.h" 
  53.  
  54. int win2;
  55.  
  56. float slab;
  57. int c_mode = 0;
  58.  
  59. float rgbc[40][3];
  60. int rgbp[40];
  61.  
  62.  
  63. #define TEX_TRANS_INC_X 0.05
  64. #define TEX_TRANS_INC_Y 0.05
  65. #define TEX_SCALE_FAC_X 1.05
  66. #define TEX_SCALE_FAC_Y 1.05
  67. float trans_tx = 0.0;
  68. float trans_ty = 0.0;
  69. float scale_tx = 1.0;
  70. float scale_ty = 1.0;
  71.  
  72. sbr_define_texture(int key);
  73. sbr_draw_texture(int key);
  74.  
  75. main()
  76. {
  77.     int win_id;
  78.     int loop, dev, i, j;
  79.     short code;
  80.         
  81.      foreground();
  82.     
  83.      win_id = winopen("surfaces");
  84.      doublebuffer();
  85.      RGBmode();
  86.      gconfig();
  87.          
  88.      subpixel(TRUE);
  89.  
  90.      shademodel(GOURAUD);
  91.      mmode(MVIEWING);
  92.      
  93.      sbr_ini_trackball(win_id);
  94.      get_color();
  95.  
  96.      slab = or_x = or_y = or_z = 20.0;   
  97.   
  98.     lmbind( MATERIAL, 1); 
  99.     sbr_define_texture(1);
  100.     sbr_draw_texture(0);
  101.     sbr_draw_texture(1);  /* har har har */
  102.     
  103.     winset(win_id);
  104.  
  105.  
  106.     qdevice( ESCKEY );
  107.     qdevice( F1KEY  );
  108.     qdevice( F2KEY  );
  109.     qdevice( F3KEY  );
  110.     qdevice( F4KEY  );
  111.     qdevice( XKEY   );
  112.     qdevice( LEFTARROWKEY );
  113.     qdevice( RIGHTARROWKEY );
  114.     qdevice( UPARROWKEY );
  115.     qdevice( DOWNARROWKEY);
  116.  
  117.     qdevice( TKEY );
  118.  
  119.     loop = TRUE;
  120.     while(loop){
  121.  
  122.         if( qtest() /* || ! attached  */){
  123.  
  124.         dev = qread(&code);
  125.            
  126.         if( code == 0 ) continue;
  127.         switch(dev) {
  128.         case ESCKEY : loop = FALSE;
  129.                       break;
  130.                 case F1KEY  : c_mode = 0;
  131.                               break;
  132.                 case F2KEY  : c_mode = 1;
  133.                               break;
  134.                 case F3KEY  : c_mode = 2;
  135.                               break;
  136.                 case F4KEY  : c_mode = 3;
  137.                               break;
  138.                 case XKEY   : scale_ty = scale_tx = 1.0;
  139.                               trans_ty = trans_tx = 0.0;
  140.                               sbr_draw_texture(1);
  141.                               winset(win_id);
  142.                               break;
  143.  
  144.  
  145.                 case LEFTARROWKEY : if (getbutton(SKEY))
  146.                                           scale_tx *= TEX_SCALE_FAC_X; 
  147.                                      else trans_tx += TEX_TRANS_INC_X;
  148.                                     sbr_draw_texture(1);
  149.                                     winset(win_id);
  150.                                     break;
  151.  
  152.                 case RIGHTARROWKEY :if (getbutton(SKEY))
  153.                                           scale_tx /= TEX_SCALE_FAC_X;
  154.                                      else trans_tx -= TEX_TRANS_INC_X;
  155.                                     sbr_draw_texture(1);
  156.                                     winset(win_id);
  157.                                     break;
  158.  
  159.                 case UPARROWKEY    :if (getbutton(SKEY))
  160.                                           scale_ty *= TEX_SCALE_FAC_Y;
  161.                                      else trans_ty += TEX_TRANS_INC_Y;
  162.                                     sbr_draw_texture(1);
  163.                                     winset(win_id);
  164.                                     break;
  165.  
  166.                 case DOWNARROWKEY  :if (getbutton(SKEY))
  167.                                           scale_ty /= TEX_SCALE_FAC_Y;
  168.                                      else trans_ty -= TEX_TRANS_INC_Y;
  169.                                     sbr_draw_texture(1);
  170.                                     winset(win_id);
  171.                                     break;
  172.         }
  173.     }
  174.  
  175.  
  176.         do_trackball();
  177.       reshapeviewport();
  178.  
  179.     
  180.         zclear();
  181.         cpack(0x00000000);
  182.         clear();
  183.         ortho(-or_x, or_x, -or_y, or_y, -slab, slab );
  184.  
  185.       pushmatrix();
  186.         loadmatrix(imat);
  187.  
  188.         scale(gr_sca,gr_sca,gr_sca);
  189.         translate( g_tx, g_ty, g_tz);
  190.             pushmatrix();
  191.               multmatrix(rmat); 
  192.               sbr_draw_cube1();
  193.             popmatrix();
  194.         multmatrix(mat);
  195.             draw_scene();   
  196.         
  197.       popmatrix();
  198.  
  199.     swapbuffers();
  200.     
  201.     
  202.     }
  203.  
  204.     winclose(win_id);
  205.     
  206. }
  207.  
  208. draw_scene()
  209. {
  210.  
  211.  
  212.   
  213.      mmode(MTEXTURE);
  214.      loadmatrix(imat);
  215.      scale(scale_ty,scale_tx,1.0);
  216.      translate(trans_ty,trans_tx,0.0);
  217.      mmode(MVIEWING);
  218.  
  219.     /* Check for transparency */
  220.     if(c_mode == 3) {
  221.         zbuffer(TRUE);
  222.         afunction(0, AF_NOTEQUAL);
  223.         }
  224.       else {
  225.         zbuffer(TRUE);
  226.         afunction(0, AF_ALWAYS);
  227.         }
  228.      scale(5.0,5.0,5.0);
  229.  
  230.  
  231.      switch( c_mode ){
  232.  
  233.       case 0: sbr_draw_cube();
  234.               break;
  235.       case 1: sbr_draw_Tcube();
  236.               break;
  237.       case 3:
  238.       case 2: sbr_draw_2DTcube();
  239.               break;
  240.       }
  241.     afunction(0, AF_ALWAYS);
  242. }
  243.  
  244.  
  245. /* setting up the colors and lighting model */
  246.  
  247. float light[] = {
  248.     POSITION, -2.0, 2.0, 2.0, 2.00,
  249.     LMNULL
  250. };
  251.  
  252. get_color()
  253. {
  254. unsigned long ri,gi,bi;
  255. int i;
  256.  
  257.  rgbc[0][0]  = 0.81; rgbc[0][1]  = 0.0 ; rgbc[0][2]  = 0.22;
  258.  rgbc[1][0]  = 0.78; rgbc[1][1]  = 0.04; rgbc[1][2]  = 0.14;
  259.  rgbc[2][0]  = 0.76; rgbc[2][1]  = 0.18; rgbc[2][2]  = 0.07;
  260.  rgbc[3][0]  = 0.80; rgbc[3][1]  = 0.35; rgbc[3][2]  = 0.03;
  261.  rgbc[4][0]  = 0.68; rgbc[4][1]  = 0.42; rgbc[4][2]  = 0.07;
  262.  rgbc[5][0]  = 0.60; rgbc[5][1]  = 0.65; rgbc[5][2]  = 0.10;
  263.  rgbc[6][0]  = 0.60; rgbc[6][1]  = 0.89; rgbc[6][2]  = 0.18;
  264.  rgbc[7][0]  = 0.29; rgbc[7][1]  = 0.84; rgbc[7][2]  = 0.30;
  265.  rgbc[8][0]  = 0.10; rgbc[8][1]  = 0.10; rgbc[8][2]  = 0.10;
  266.  rgbc[9][0]  = 0.04; rgbc[9][1]  = 0.75; rgbc[9][2]  = 0.70;
  267.  rgbc[10][0] = 0.10; rgbc[10][1] = 0.64; rgbc[10][2] = 0.89;
  268.  rgbc[11][0] = 0.10; rgbc[11][1] = 0.50; rgbc[11][2] = 0.89;
  269.  rgbc[12][0] = 0.10; rgbc[12][1] = 0.50; rgbc[12][2] = 0.69;
  270.  rgbc[13][0] = 0.15; rgbc[13][1] = 0.35; rgbc[13][2] = 0.75;
  271.  rgbc[14][0] = 0.20; rgbc[14][1] = 0.20; rgbc[14][2] = 0.90;
  272.  rgbc[15][0] = 0.42; rgbc[15][1] = 0.16; rgbc[15][2] = 0.84;
  273.  
  274. for(i=0;i<16;i++){
  275.     ri = (unsigned long)(rgbc[i][0]*255.0) ;
  276.     gi = (unsigned long)(rgbc[i][1]*255.0) << 8;
  277.     bi = (unsigned long)(rgbc[i][2]*255.0) << 16;
  278.     rgbp[i] = ri+gi+bi;
  279.     }
  280.  
  281.     lmdef( DEFMATERIAL, 1, 0, NULL);
  282.     lmdef( DEFLIGHT, 1, 0, NULL);
  283.     lmdef( DEFLMODEL, 1, 0, NULL);
  284.  
  285.     lmbind( MATERIAL, 1);
  286.     lmbind( LMODEL, 1);
  287.     lmbind( LIGHT0, 1);
  288.  
  289. }  /* end get_color */
  290.  
  291.  
  292. /* setting up texture mapping */
  293.  
  294. #define ARR_SIZE     16
  295.  
  296.  
  297. unsigned   long arr[ARR_SIZE][ARR_SIZE];    /* Texture array */
  298. unsigned   long *img;
  299.  
  300.  
  301. float texps[] = {
  302.     TX_MINFILTER, TX_POINT,
  303.         TX_MAGFILTER, TX_POINT, 
  304.         TX_WRAP_T, TX_CLAMP,  
  305.         TX_WRAP_S, TX_REPEAT,
  306.         TX_NULL};
  307.          
  308. float tevps[] = {TV_MODULATE, TV_NULL};
  309.  
  310. sbr_define_texture(int key)
  311. {
  312.     int i, j;
  313.     unsigned int ri, gi, bi, ai;
  314.     int delta;
  315.  
  316.     delta = ARR_SIZE;
  317.         for (i = 0; i < delta; i++) {
  318.             ri =  rgbc[i][0] *255;
  319.         gi =  rgbc[i][1] *255;
  320.         bi =  rgbc[i][2] *255;
  321.             for (j = 0; j < delta/2; j++) {
  322.             arr[j][i] = ri + (gi << 8) + (bi << 16) + (255 << 24); 
  323.         }
  324.             for (j = delta/2; j < delta; j++) {
  325.             arr[j][i] = 0x00ffffff;
  326.             }
  327.         }
  328.  
  329.     img = arr[0];
  330.  
  331.     texdef2d(key, 4, delta, delta, img, 0, texps);      
  332.     tevdef(key,0,tevps);
  333.         
  334. }
  335.  
  336. sbr_bind_texture(int key)
  337. {
  338.     if( key > 0 ){
  339.       texbind(TX_TEXTURE_0,0);
  340.       tevbind(TV_ENV0,0);
  341.       texbind(TX_TEXTURE_0,key);                    
  342.       tevbind(TV_ENV0,key);
  343.       }
  344.     else{
  345.       texbind(TX_TEXTURE_0,0);                    
  346.       tevbind(TV_ENV0,0);
  347.     
  348.     }
  349. }
  350. static float t1[2] = { 0.0, 0.0 };
  351. static float t2[2] = { 0.0, 1.0 };
  352. static float t3[2] = { 1.0, 1.0 };
  353. static float t4[2] = { 1.0, 0.0 };
  354.  
  355. static float v1[3] = {-15, -15, 0.0};
  356. static float v2[3] = { 15, -15, 0.0};
  357. static float v3[3] = { 15,  15, 0.0};
  358. static float v4[3] = {-15,  15, 0.0};
  359.  
  360.  
  361. sbr_draw_texture(int key)
  362. {
  363.  
  364.     if( key == 0 ){
  365.         win2 = winopen(" texture ");
  366.         RGBmode();
  367.         gconfig();
  368.         sbr_define_texture(2);
  369.         sbr_bind_texture(2); 
  370.     }
  371.     else{
  372.     winset(win2);
  373.         sbr_bind_texture(0);
  374.         sbr_bind_texture(2);  
  375.     }
  376.     
  377.  
  378.      reshapeviewport();
  379.      ortho(-or_x, or_x, -or_y, or_y, -slab, slab );
  380.  
  381.      mmode(MTEXTURE);
  382.       loadmatrix(imat);
  383.       scale(scale_ty,scale_tx,1.0);
  384.       translate(trans_ty,trans_tx,0.0);
  385.      mmode(MVIEWING);
  386.  
  387.      RGBcolor(0, 0, 0);
  388.      clear();
  389.      zclear();
  390.      RGBcolor(255, 255, 255);
  391.      
  392.      bgnpolygon();
  393.       t2f(t1); v3f(v1);
  394.       t2f(t2); v3f(v2);
  395.       t2f(t3); v3f(v3);
  396.       t2f(t4); v3f(v4);
  397.      endpolygon();    
  398.    sbr_bind_texture(0); 
  399.  
  400.    
  401. }
  402.  
  403.  
  404. /* setting up the cube's geometry */
  405.  
  406. /*          3  _ _ _    2
  407.         7 _ _ |_  6  |  
  408.          |    |  |   |
  409.          |    |  |   |
  410.          |  0 |_ |_ _| 1
  411.          |_ _ _ _|
  412.         4         5
  413. */
  414.  
  415.         
  416. /* geometry */
  417. static float vr0[3] = {-1.0, -1.0, -1.0 };
  418. static float vr1[3] = { 1.0, -1.0, -1.0 };
  419. static float vr2[3] = { 1.0,  1.0, -1.0 };
  420. static float vr3[3] = {-1.0,  1.0, -1.0 };
  421. static float vr4[3] = {-1.0, -1.0,  1.0 };
  422. static float vr5[3] = { 1.0, -1.0,  1.0 };
  423. static float vr6[3] = { 1.0,  1.0,  1.0 };
  424. static float vr7[3] = {-1.0,  1.0,  1.0 };
  425.  
  426. static float vn0[3] = {  0.0, 0.0,-1.0 };
  427. static float vn1[3] = { -1.0, 0.0, 0.0 };
  428. static float vn2[3] = {  0.0,-1.0, 0.0 };
  429. static float vn3[3] = {  0.0, 1.0, 0.0 };
  430. static float vn4[3] = {  0.0, 0.0, 1.0 };
  431. static float vn5[3] = {  1.0, 0.0, 0.0 };
  432.  
  433. static int ci[8][2] = { { 1, 2 },
  434.                         { 3, 4 },
  435.                         { 5, 6 },
  436.                         { 7, 8 },
  437.                         { 9,10 },
  438.                         {11,12 },
  439.                         {13,14 },
  440.                         {15, 0 } };                       
  441.  
  442. sbr_draw_cube()
  443. {
  444.  
  445. lmbind(MATERIAL, 1); 
  446. lmcolor(LMC_DIFFUSE);
  447.  
  448. bgnpolygon();  n3f(vn0);
  449.  cpack( rgbp[ci[0][0]] );
  450.  v3f(vr0); 
  451.  cpack( rgbp[ci[1][0]] );
  452.  v3f(vr1);
  453.  cpack( rgbp[ci[2][0]] );
  454.  v3f(vr2);
  455.  cpack( rgbp[ci[3][0]] );
  456.  v3f(vr3);
  457. endpolygon();
  458.  
  459. bgnpolygon();  n3f(vn1);
  460.  cpack( rgbp[ci[0][0]] );
  461.  v3f(vr0);
  462.  cpack( rgbp[ci[4][0]] );
  463.  v3f(vr4);
  464.  cpack( rgbp[ci[7][0]] );
  465.  v3f(vr7);
  466.  cpack( rgbp[ci[3][0]] );
  467.  v3f(vr3);
  468. endpolygon();
  469.  
  470. bgnpolygon();  n3f(vn2);
  471.  cpack( rgbp[ci[0][0]] );
  472.  v3f(vr0);
  473.  cpack( rgbp[ci[4][0]] );
  474.  v3f(vr4);
  475.  cpack( rgbp[ci[5][0]] );
  476.  v3f(vr5);
  477.  cpack( rgbp[ci[1][0]] );
  478.  v3f(vr1);
  479. endpolygon();
  480.  
  481. bgnpolygon();  n3f(vn3);
  482.  cpack( rgbp[ci[3][0]] );
  483.  v3f(vr3);
  484.  cpack( rgbp[ci[7][0]] );
  485.  v3f(vr7);
  486.  cpack( rgbp[ci[6][0]] );
  487.  v3f(vr6);
  488.  cpack( rgbp[ci[2][0]] );
  489.  v3f(vr2);
  490. endpolygon();
  491.  
  492. bgnpolygon();  n3f(vn4);
  493.  cpack( rgbp[ci[4][0]] );
  494.  v3f(vr4);
  495.  cpack( rgbp[ci[5][0]] );
  496.  v3f(vr5);
  497.  cpack( rgbp[ci[6][0]] );
  498.  v3f(vr6);
  499.  cpack( rgbp[ci[7][0]] );
  500.  v3f(vr7);
  501. endpolygon();
  502.  
  503. bgnpolygon();  n3f(vn5);
  504.  cpack( rgbp[ci[5][0]] );
  505.  v3f(vr5);
  506.  cpack( rgbp[ci[1][0]] );
  507.  v3f(vr1);
  508.  cpack( rgbp[ci[2][0]] );
  509.  v3f(vr2);
  510.  cpack( rgbp[ci[6][0]] );
  511.  v3f(vr6);
  512. endpolygon();
  513.  
  514. lmcolor(LMC_COLOR);
  515.  
  516. }
  517.  
  518.  
  519. sbr_draw_cube1()
  520. {
  521.  
  522. lmbind(MATERIAL, 0);
  523. lmbind(MATERIAL, 1);
  524.  
  525. bgnpolygon();  n3f(vn0);
  526.  v3f(vr0); v3f(vr1); v3f(vr2); v3f(vr3);
  527. endpolygon();
  528.  
  529. bgnpolygon();  n3f(vn1);
  530.  v3f(vr0); v3f(vr4); v3f(vr7); v3f(vr3);
  531. endpolygon();
  532.  
  533. bgnpolygon();  n3f(vn2);
  534.  v3f(vr0); v3f(vr4); v3f(vr5); v3f(vr1);
  535. endpolygon();
  536.  
  537. bgnpolygon();  n3f(vn3);
  538.  v3f(vr3); v3f(vr7); v3f(vr6); v3f(vr2);
  539. endpolygon();
  540.  
  541. bgnpolygon();  n3f(vn4);
  542.  v3f(vr4); v3f(vr5); v3f(vr6); v3f(vr7);
  543. endpolygon();
  544.  
  545. bgnpolygon();  n3f(vn5);
  546.  v3f(vr5); v3f(vr1); v3f(vr2); v3f(vr6);
  547. endpolygon();
  548.  
  549. }
  550.  
  551. sbr_draw_Tcube()
  552. {
  553. float tx[2];
  554.  
  555. lmbind(MATERIAL, 1);
  556. sbr_bind_texture(1);
  557. tx[1] = 0;
  558. bgnpolygon();  n3f(vn0);
  559.  tx[0] = 1.0/15. * ci[0][0]; t2f (tx);
  560.  v3f(vr0);
  561.  tx[0] = 1.0/15. * ci[1][0]; t2f(tx);
  562.  v3f(vr1);
  563.  tx[0] = 1.0/15. * ci[2][0]; t2f (tx);
  564.  v3f(vr2);
  565.  tx[0] = 1.0/15. * ci[3][0]; t2f (tx);
  566.  v3f(vr3);
  567. endpolygon();
  568.  
  569. bgnpolygon();  n3f(vn1);
  570.  tx[0] = 1.0/15. * ci[0][0]; t2f (tx);
  571.  v3f(vr0);
  572.  tx[0] = 1.0/15. * ci[4][0]; t2f (tx);
  573.  v3f(vr4);
  574.  tx[0] = 1.0/15. * ci[7][0]; t2f (tx);
  575.  v3f(vr7);
  576.  tx[0] = 1.0/15. * ci[3][0]; t2f (tx);
  577.  v3f(vr3);
  578. endpolygon();
  579.  
  580. bgnpolygon();  n3f(vn2);
  581.  tx[0] = 1.0/15. * ci[0][0]; t2f (tx);
  582.  v3f(vr0);
  583.  tx[0] = 1.0/15. * ci[4][0]; t2f (tx);
  584.  v3f(vr4);
  585.  tx[0] = 1.0/15. * ci[5][0]; t2f (tx);
  586.  v3f(vr5);
  587.  tx[0] = 1.0/15. * ci[1][0]; t2f (tx);
  588.  v3f(vr1);
  589. endpolygon();
  590.  
  591. bgnpolygon();  n3f(vn3);
  592.  tx[0] = 1.0/15. * ci[3][0]; t2f (tx);
  593.  v3f(vr3);
  594.  tx[0] = 1.0/15. * ci[7][0]; t2f (tx);
  595.  v3f(vr7);
  596.  tx[0] = 1.0/15. * ci[6][0]; t2f (tx);
  597.  v3f(vr6);
  598.  tx[0] = 1.0/15. * ci[2][0]; t2f (tx);
  599.  v3f(vr2);
  600. endpolygon();
  601.  
  602. bgnpolygon();  n3f(vn4);
  603.  tx[0] = 1.0/15. * ci[4][0]; t2f (tx);
  604.  v3f(vr4);
  605.  tx[0] = 1.0/15. * ci[5][0]; t2f (tx);
  606.  v3f(vr5);
  607.  tx[0] = 1.0/15. * ci[6][0]; t2f (tx);
  608.  v3f(vr6);
  609.  tx[0] = 1.0/15. * ci[7][0]; t2f (tx);
  610.  v3f(vr7);
  611. endpolygon();
  612.  
  613. c3f(rgbc[7]);
  614. bgnpolygon();  n3f(vn5);
  615.  tx[0] = 1.0/15. * ci[5][0]; t2f (tx);
  616.  v3f(vr5); 
  617.  tx[0] = 1.0/15. * ci[1][0]; t2f (tx);
  618.  v3f(vr1);
  619.  tx[0] = 1.0/15. * ci[2][0]; t2f (tx);
  620.  v3f(vr2);
  621.  tx[0] = 1.0/15. * ci[6][0]; t2f (tx);
  622.  v3f(vr6);
  623. endpolygon();
  624.  
  625.  sbr_bind_texture(0);
  626. }
  627.  
  628. sbr_draw_2DTcube()
  629. {
  630. float tx[2];
  631.  
  632. lmbind(MATERIAL, 1);
  633. sbr_bind_texture(1);
  634.  
  635. bgnpolygon();  n3f(vn0);
  636.  tx[0] = 1.0/15. * ci[0][0]; 
  637.  tx[1] = 1.0/15. * ci[0][1]; 
  638.  t2f (tx);
  639.  v3f(vr0);
  640.  tx[0] = 1.0/15. * ci[1][0];
  641.  tx[1] = 1.0/15. * ci[1][1];
  642.  t2f(tx);
  643.  v3f(vr1);
  644.  tx[0] = 1.0/15. * ci[2][0]; 
  645.  tx[1] = 1.0/15. * ci[2][1]; 
  646.  t2f (tx);
  647.  v3f(vr2);
  648.  tx[0] = 1.0/15. * ci[3][0]; 
  649.  tx[1] = 1.0/15. * ci[3][1]; 
  650.  t2f (tx);
  651.  v3f(vr3);
  652. endpolygon();
  653.  
  654. bgnpolygon();  n3f(vn1);
  655.  tx[0] = 1.0/15. * ci[0][0]; 
  656.  tx[1] = 1.0/15. * ci[0][1]; 
  657.  t2f (tx);
  658.  v3f(vr0);
  659.  tx[0] = 1.0/15. * ci[4][0]; 
  660.  tx[1] = 1.0/15. * ci[4][1]; 
  661.  t2f (tx);
  662.  v3f(vr4);
  663.  tx[0] = 1.0/15. * ci[7][0]; 
  664.  tx[1] = 1.0/15. * ci[7][1]; 
  665.  t2f (tx);
  666.  v3f(vr7);
  667.  tx[0] = 1.0/15. * ci[3][0]; 
  668.  tx[1] = 1.0/15. * ci[3][1]; 
  669.  t2f (tx);
  670.  v3f(vr3);
  671. endpolygon();
  672.  
  673.  
  674. bgnpolygon();  n3f(vn2);
  675.  tx[0] = 1.0/15. * ci[0][0]; 
  676.  tx[1] = 1.0/15. * ci[0][1]; 
  677.  t2f (tx);
  678.  v3f(vr0);
  679.  tx[0] = 1.0/15. * ci[4][0]; 
  680.  tx[1] = 1.0/15. * ci[4][1]; 
  681.  t2f (tx);
  682.  v3f(vr4);
  683.  tx[0] = 1.0/15. * ci[5][0]; 
  684.  tx[1] = 1.0/15. * ci[5][1]; 
  685.  t2f (tx);
  686.  v3f(vr5);
  687.  tx[0] = 1.0/15. * ci[1][0]; 
  688.  tx[1] = 1.0/15. * ci[1][1]; 
  689.  t2f (tx);
  690.  v3f(vr1);
  691. endpolygon();
  692.  
  693.  
  694. bgnpolygon();  n3f(vn3);
  695.  tx[0] = 1.0/15. * ci[3][0]; 
  696.  tx[1] = 1.0/15. * ci[3][1]; 
  697.  t2f (tx);
  698.  v3f(vr3);
  699.  tx[0] = 1.0/15. * ci[7][0]; 
  700.  tx[1] = 1.0/15. * ci[7][1]; 
  701.  t2f (tx);
  702.  v3f(vr7);
  703.  tx[0] = 1.0/15. * ci[6][0]; 
  704.  tx[1] = 1.0/15. * ci[6][1]; 
  705.  t2f (tx);
  706.  v3f(vr6);
  707.  tx[0] = 1.0/15. * ci[2][0]; 
  708.  tx[1] = 1.0/15. * ci[2][1]; 
  709.  t2f (tx);
  710.  v3f(vr2);
  711. endpolygon();
  712.  
  713. bgnpolygon();  n3f(vn4);
  714.  tx[0] = 1.0/15. * ci[4][0]; 
  715.  tx[1] = 1.0/15. * ci[4][1]; 
  716.  t2f (tx);
  717.  v3f(vr4);
  718.  tx[0] = 1.0/15. * ci[5][0]; 
  719.  tx[1] = 1.0/15. * ci[5][1]; 
  720.  t2f (tx);
  721.  v3f(vr5);
  722.  tx[0] = 1.0/15. * ci[6][0]; 
  723.  tx[1] = 1.0/15. * ci[6][1]; 
  724.  t2f (tx);
  725.  v3f(vr6);
  726.  tx[0] = 1.0/15. * ci[7][0]; 
  727.  tx[1] = 1.0/15. * ci[7][1]; 
  728.  t2f (tx);
  729.  v3f(vr7);
  730. endpolygon();
  731.  
  732. c3f(rgbc[7]);
  733. bgnpolygon();  n3f(vn5);
  734.  tx[0] = 1.0/15. * ci[5][0]; 
  735.  tx[1] = 1.0/15. * ci[5][1]; 
  736.  t2f (tx);
  737.  v3f(vr5);
  738.  tx[0] = 1.0/15. * ci[1][0]; 
  739.  tx[1] = 1.0/15. * ci[1][1]; 
  740.  t2f (tx);
  741.  v3f(vr1);
  742.  tx[0] = 1.0/15. * ci[2][0]; 
  743.  tx[1] = 1.0/15. * ci[2][1]; 
  744.  t2f (tx);
  745.  v3f(vr2);
  746.  tx[0] = 1.0/15. * ci[6][0]; 
  747.  tx[1] = 1.0/15. * ci[6][1]; 
  748.  t2f (tx);
  749.  v3f(vr6);
  750. endpolygon();
  751.  
  752.  sbr_bind_texture(0);
  753. }
  754.